﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLTV_V2.DataAccess;
using QLTV_V2.BussinessLogic;
using QLTV_V2.BussinessObject;

namespace QLTV_V2
{
    public partial class FrmBienmuc : DevComponents.DotNetBar.Office2007RibbonForm
    {
        public FrmBienmuc()
        {
            InitializeComponent();
        }
        ConnectData conn = new ConnectData();
        Utilities uti = new Utilities();
        SachBUS sachBUS = new SachBUS();
        DauSach ds=new DauSach();
        BanSach bs = new BanSach();
        public int kt,dk, soluongnhap;//Lưu biến kiểm tra tạo mới hay sửa/
        public string mactphieunhap, tendausach, maloaisach, madausach;
        //Load form
        private void FrmBienmuc_Load(object sender, EventArgs e)
        {
            txt_NhanDe.Text = tendausach;
            //Load combobox Loai sach
            comb_MaLoaiSach.DataSource = uti.getDataSource("LoaiSach", "TenLoaiSach");
            comb_MaLoaiSach.DisplayMember = "TenLoaiSach";
            comb_MaLoaiSach.ValueMember = "MaLoaiSach";
            //Load combobox Ngon ngu
            comb_Ngonngu.DataSource = uti.getDataSource("NgonNgu", "TenNgonNgu");
            comb_Ngonngu.DisplayMember = "TenNgonNgu";
            comb_Ngonngu.ValueMember = "MaNgonNgu";
            //Load combobox vi trí lưu
            comb_Vitri.DataSource = uti.getDataSource("ViTri", "MaViTri");
            comb_Vitri.DisplayMember = "MaViTri";
            comb_Vitri.ValueMember = "MaViTri";
            //Load combobox dạng lwuu trữ
            comb_DangLuuTru.ResetText();
            comb_DangLuuTru.Items.Add("Sách In");
            comb_DangLuuTru.Items.Add("Sách photo");
            comb_DangLuuTru.Items.Add("Băng, đĩa");
            comb_DangLuuTru.Items.Add("Đồ án");
            comb_DangLuuTru.Items.Add("Sách báo, tạp chí");
            comb_DangLuuTru.Items.Add("Khác");
            comb_DangLuuTru.SelectedIndex = 0;
            if (kt == 1)//Tao moi bien muc
            {
                //Load gia tri
                CTPhieuNhap ct = new CTPhieuNhap();
                ct = sachBUS.GetCTPhieuNhap_Object(mactphieunhap);
                comb_MaLoaiSach.SelectedValue = ct.MaLoaiSach;
                txt_Tendausach.Text = ct.TenDauSach;
                txt_Giabia.Text = ct.DonGia.ToString();
               // comb_MaLoaiSach.SelectedValue = ct.MaLoaiSach;
                date_NgayPH.Value = System.DateTime.Now;
            }
            else if (kt == 2)//Load du lieu khi sua thong tin từ form quản lý
            {
                try
                {
                    //
                    DauSach ds = new DauSach();
                    ds = sachBUS.getDauSach_object(tendausach, maloaisach, "madausach", 1);
                    txt_MaDausach.Text = ds.MaDauSach;
                    txt_Tendausach.Text = ds.TenDauSach;
                    comb_MaLoaiSach.SelectedValue = ds.MaLoaiSach;
                    txt_MaTacGia.Text = ds.MaTacGia;
                    txt_TacGia.Text = sachBUS.getTenTG(txt_MaTacGia.Text);
                    txt_MaNXB.Text = ds.MaNXB;
                    txt_NhaXB.Text = sachBUS.getTenNXB(txt_MaNXB.Text);
                    txt_DDC.Text = ds.KHPhanLoai;
                    txt_ISBN.Text = ds.SoISBN;
                    comb_Ngonngu.SelectedValue = ds.MaNgonNgu;
                    txt_Giabia.Text = ds.GiaBia.ToString();
                    txt_Sotrang.Text = ds.SoTrang.ToString();
                    txt_Khogiay.Text = ds.KhoGiay;
                    txt_HinhthucBia.Text = ds.HinhThucBia;
                    txt_NamXB.Text = ds.NamXB.ToString();
                    txt_LanXB.Text = ds.LanXB;
                    txt_SoPH.Text = ds.SoPH;
                    date_NgayPH.Value = ds.NgayPH;
                    txt_TLkemtheo.Text = ds.TLKemTheo;
                    txt_Anhbia.Text = ds.AnhBia;
                    pictureBox_AnhBia.BackgroundImage = System.Drawing.Image.FromFile(ds.AnhBia, true);
                    comb_Vitri.SelectedValue = ds.ViTriTam;
                    txt_TenDauSach1.Text = ds.NhanDeSongsong;
                    txt_TacGia1.Text = ds.DongTacGia;
                    txt_PhuDe.Text = ds.PhuDe;
                    txt_BienDich.Text = ds.BienDich;
                    txt_TomTatND.Text = ds.TomtatND;
                    comb_DangLuuTru.SelectedItem = ds.DangLuuTru;
                    //
                    madausach = txt_MaDausach.Text;
                }
                catch
                { 
                
                }
            }    
        }
        //Chọn biên mục đã có sẵn
        #region Xử lý các button
        private void btn_ChonBienmuc_Click(object sender, EventArgs e)
        {
            int dem = 0;
            int dong = dgv_Sach.CurrentRow.Index;
            //Them bien muc moi
            madausach = dgv_Sach.Rows[dong].Cells["MaDauSach"].Value.ToString();
            ds = sachBUS.getDauSach_object("check", "check", madausach, 2);
            string maloaisach = ds.MaLoaiSach;
            string defaultValue = maloaisach + "-0000";
            string lastID = uti.GetLastID_DK("DauSach", "MaLoaiSach", maloaisach, "MaDauSach", "MaDauSach", defaultValue);
            string nextID = uti.GetNextID(lastID, maloaisach + "-");
            ds.MaDauSach = nextID;
            ds.TenDauSach = tendausach;
            MessageBox.Show(madausach+"đs"+ ds.MaDauSach);
            if (sachBUS.insertDauSach(ds) == true)
            {
                int soluong = soluongnhap;//Lay so luong sach nhap tu phieu nhap sach
                for (int i = 0; i < soluong; i++)
                {
                    bs = getBanSach_object();
                    if (sachBUS.insertBanSach(bs) == true)
                        dem++;
                }
                if (dem != 0)
                {
                    if (sachBUS.update_After_BM_DK(mactphieunhap, 1) == true)
                        if (sachBUS.update_After_BM_DK(mactphieunhap, 2) == true)
                            MessageBox.Show("Biên mục và ĐK thành công " + dem + " mã cá biệt", "Thông báo");
                        else
                            MessageBox.Show("Lỗi", "Thông báo");
                }
            }
        }
        //Lưu thông tin biên mục
        private void btn_Luu_Click(object sender, EventArgs e)
        {
            string img = txt_Anhbia.Text.Substring(txt_Anhbia.Text.LastIndexOf('\\') + 1);
            if (img != "")
            {
                try
                {
                    pictureBox_AnhBia.Image.Save(Application.StartupPath + @"\Images\Books\" + img);
                }
                catch
                {

                }
            }
            if (checkSave() == true)
            {
                DauSach ds = new DauSach();
                ds = getDauSach_Object();
               
                if (kt == 1)//Thêm mới biên muc
                {
                    if (sachBUS.insertDauSach(ds) == true)
                        if (sachBUS.update_After_BM_DK(mactphieunhap, 1) == true)
                        {
                            //Cập nhật thông tin chi tiêt phiếu nhập nếu có thay đổi
                            string nhande = txt_Tendausach.Text;
                            string loaisach = comb_MaLoaiSach.SelectedValue.ToString();
                            int gia=Convert.ToInt32(txt_Giabia.Text);
                            if (sachBUS.updateCTPhieuNhap_After(mactphieunhap, nhande, loaisach, gia) == true)
                                MessageBox.Show("Biên mục thành công");
                        }
                        else
                            MessageBox.Show("Không thể lưu, kiểm tra lại thông tin", "Thông báo");
                }
                else if (kt == 2) //Thay đổi thông tin biên mục
                {
                    if (sachBUS.updateDauSach(ds,madausach) == true)
                    {
                        string tendausach = txt_Tendausach.Text;
                        string maloaisach = comb_MaLoaiSach.SelectedValue.ToString();
                        double giabia = Convert.ToDouble(txt_Giabia.Text);
                        //Cập nhật thông tin chi tiêt phiếu nhập nếu có thay đổi
                        if (sachBUS.updateCTPhieuNhap_After(mactphieunhap, tendausach, maloaisach, giabia) == true)
                        {
                            MessageBox.Show("Cập nhật thông tin biên mục thành công", "Thông báo");
                        }
                        else
                            MessageBox.Show("Không thể lưu, kiểm tra lại thông tin", "Thông báo");
                    }
               }
            }
        }
        //Tạo mã kế tiếp cho mã đàu sách
        private void btn_Taoma_Click(object sender, EventArgs e)
        {
            string maloaisach=comb_MaLoaiSach.SelectedValue.ToString().ToUpper();
            string defaultValue=maloaisach+"-0000";
            string lastID = uti.GetLastID_DK("DauSach","MaLoaiSach",maloaisach,"MaDauSach","MaDauSach",defaultValue);
            string nextID = uti.GetNextID(lastID, maloaisach+"-");
            txt_MaDausach.Text = nextID.ToUpper();
        }
        //Chọn ảnh bìa
        private void btn_ChonAnh_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "All File (*.*)|*.*|JPG Files(*.JPG)|*.JPG | GIF Files(*.GIF)|*.GIF";
            if (ofd.ShowDialog(this) == DialogResult.OK)
            {
                pictureBox_AnhBia.Image = Image.FromFile(ofd.FileName);
                string filename = ofd.FileName;
                txt_Anhbia.Text = filename.ToString();
            }
        }
        //Load du lieu theo textbos để kiêm tra trùng biên mục
        private void text_NhanDe_TextChanged(object sender, EventArgs e)
        {
            try
            {
                dgv_Sach.DataSource = sachBUS.getDauSach(txt_NhanDe.Text);
            }
            catch { }
        }
        //Thoát khỏi form Bien mục
        private void btn_Dong_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion
        #region Lấy thông tin biên muc
        //Lấy thông tin đầu sách --> object
        DauSach getDauSach_Object()
        {
            DauSach ds = new DauSach();
            ds.MaDauSach = txt_MaDausach.Text.ToUpper();
            ds.TenDauSach = txt_Tendausach.Text;
            ds.MaLoaiSach = comb_MaLoaiSach.SelectedValue.ToString().ToUpper();
            ds.MaTacGia = txt_MaTacGia.Text;
            ds.MaNXB = txt_MaNXB.Text.ToUpper();
            ds.KHPhanLoai = txt_DDC.Text.ToUpper();
            ds.SoISBN = txt_ISBN.Text;
            ds.MaNgonNgu = comb_Ngonngu.SelectedValue.ToString().ToUpper();
            ds.GiaBia =Convert.ToDouble(txt_Giabia.Text);
            ds.SoTrang = Convert.ToInt32(txt_Sotrang.Text);
            ds.KhoGiay = txt_Khogiay.Text;
            ds.HinhThucBia = txt_HinhthucBia.Text;
            ds.NamXB = Convert.ToInt32(txt_NamXB.Text);
            ds.LanXB = txt_LanXB.Text;
            ds.SoPH = txt_SoPH.Text;
            ds.NgayPH = Convert.ToDateTime(date_NgayPH.Value);
            ds.TLKemTheo = txt_TLkemtheo.Text;
            string img = txt_Anhbia.Text.Substring(txt_Anhbia.Text.LastIndexOf('\\') + 1);
            if (img != "")
                ds.AnhBia = @"Images\Books\" + img;
            else
            {
                ds.AnhBia = @"Images\Books\no-avatar.jpg";
            }
            ds.ViTriTam = comb_Vitri.SelectedValue.ToString().ToUpper();
            CTPhieuNhap ct = new CTPhieuNhap();
            ct = sachBUS.GetCTPhieuNhap_Object(mactphieunhap);
            ds.SoLuongTam = ct.SoLuongNhap;
            ds.NhanDeSongsong = txt_TenDauSach1.Text;
            ds.DongTacGia = txt_TacGia1.Text;
            ds.PhuDe = txt_PhuDe.Text;
            ds.BienDich = txt_BienDich.Text;
            ds.TomtatND = txt_TomTatND.Text;
            ds.DangLuuTru = comb_DangLuuTru.SelectedItem.ToString();
            return ds;
        }
        //Lấy thông tin CT phiếu nhập sau khi thay đổi trong biên mục --> dùng cho update
        CTPhieuNhap getCTPhieuNhap_after()
        {
            CTPhieuNhap ct = new CTPhieuNhap();
            ct.TenDauSach = txt_Tendausach.Text;
            ct.MaLoaiSach = comb_MaLoaiSach.SelectedValue.ToString().ToUpper();
            ct.DonGia = Convert.ToDouble(txt_Giabia.Text);
            CTPhieuNhap ct1 = new CTPhieuNhap();
            ct1 = sachBUS.GetCTPhieuNhap_Object(mactphieunhap);
            ct.SoLuongNhap = ct1.SoLuongNhap;
            return ct;
        }
        //Kiểm tra trước khi lưu thông tin biên mục
        bool checkSave()
        {
            if (txt_Tendausach.Text=="")
            {
                MessageBox.Show("Tên ấn phẩm không được để trống","Thông báo");
                txt_Tendausach.Focus();
                return false;
            }
            if (txt_DDC.Text=="")
            {
                MessageBox.Show("Chưa xác nhận mã phân loại DDC","Thông báo");
                txt_DDC.Focus();
                return false;
            }
            if (txt_MaTacGia.Text == "")
            {
                MessageBox.Show("Chưa nhập thông tin tác giả", "Thông báo");
                btn_ChonTacGia.Focus();
                return false;
            }
            if (txt_MaNXB.Text == "")
            {
                MessageBox.Show("Chưa nhập thông tin nhà xuất bản", "Thông báo");
                btn_ChonNXB.Focus();
                return false;
            }
            if (txt_Giabia.Text=="")
            {
                MessageBox.Show("Chưa nhập giá bìa","Thông báo");
                txt_Giabia.Focus();
                return false;
            }
            else
                if (uti.checkDigit(txt_Giabia.Text) == false)
                {
                    txt_Giabia.Focus();
                    MessageBox.Show("Giá bìa không hợp lệ", "Thông báo");
                }
            if (txt_NamXB.Text == "")
            {
                MessageBox.Show("Chưa nhập năm xuất bản","Thông báo");
                txt_NamXB.Focus();
                return false;
            }
            else
                if (uti.checkDigit(txt_NamXB.Text) == false || txt_NamXB.Text.Length!=4)
                {
                    MessageBox.Show("Năm xuất bản không hợp lệ","Thông báo");
                    return false;
                }
            if (txt_Sotrang.Text == "")
            {
                MessageBox.Show("Số trang không được để trống","Thông báo");
                txt_Sotrang.Focus();
                return false;
            }
            if (uti.checkDigit(txt_Sotrang.Text) == false)
            {
                MessageBox.Show("Số trang không hợp lệ","Thông báo");
                txt_Sotrang.Focus();
                return false;
            }
            return true;
        }
        #endregion
        #region Lấy thông tin ĐK mã cá biệt
        private BanSach getBanSach_object()
        {
            string lastID = uti.GetLastID_DK("BanSach", "MaDauSach", ds.MaDauSach, "MaBanSach", "MaBanSach", ds.MaDauSach + "-0000");
            string nextID = uti.GetNextID(lastID, ds.MaDauSach + "-");
            bs.MaBanSach = nextID.ToUpper();
            bs.MaDauSach = ds.MaDauSach.ToUpper();
            bs.NgayCN = System.DateTime.Now;
            bs.MaViTri = ds.ViTriTam.ToUpper();
            bs.TinhTrang = "Tốt";
            bs.TrangThai = "Sẵn sàng";
            return bs;
        }
        #endregion
        #region Lấy thông tin tác giả và NXB
        //Lấy thông tin tác giả
        public void GetValue(string maTG, string tenTG)
        {
            txt_MaTacGia.Text = maTG;
            txt_TacGia.Text = tenTG;
        }
        private void btn_ChonTacGia_Click(object sender, EventArgs e)
        {
            frmGetTacGia frm = new frmGetTacGia();
            frm.MyGetData = new frmGetTacGia.GetString(GetValue);
            frm.ShowDialog();
            
        }
        //Lấy thông tin nhà xuất bản
        public void GetValue_NXB(string maNXB, string tenNXB)
        {
            txt_MaNXB.Text = maNXB;
            txt_NhaXB.Text = tenNXB;
        }
        private void btn_ChonNXB_Click(object sender, EventArgs e)
        {
            frmGetNXB frm = new frmGetNXB();
            frm.MyGetData = new frmGetNXB.GetString(GetValue_NXB);
            frm.ShowDialog();
            
        }
        #endregion


    }
}
